Script backup config

Descripcion

Script para almacenar todas las configuraciones del sistema y asi poder restaurarlas.

Backups
Explicacion
Script
#!/bin/bash
BACKUP_FOLDER="BackupConfig ($(hostname)) $(date +"%F %X")"
mkdir "$BACKUP_FOLDER"

ROOT_FOLDER="$BACKUP_FOLDER/RootFolder"
USER="Usuario"

USER_FOLDER="$ROOT_FOLDER/home/$USER"
USER_CONFIG_FOLDER="$USER_FOLDER/config"

#START Function definition

log_OK_message(){
  echo -e "\e[32m$1\e[0m" | tee -a "$BACKUP_FOLDER/BU-log.txt"
}

log_ERROR_message(){
  echo -e "\e[31m$1\e[0m" | tee -a "$BACKUP_FOLDER/BU-log.txt"
}

log_WARN_message(){
  echo -e "\e[35m$1\e[0m" | tee -a "$BACKUP_FOLDER/BU-log.txt"
}

rpm_backup(){
  RPM_FOLDER="$BACKUP_FOLDER/RPM List"

  mkdir "$RPM_FOLDER"

  log_OK_message "Creando lista de paquetes RPM..."
  rpm -qa > "$RPM_FOLDER/rpmList.txt"

  log_WARN_message "Creando lista de paquets RPM no verificados, puede tardar un rato..."
  rpm -qaV > RpmNotVerified.tmp

  RPM_NOT_VERIFIED_FILES=$(cat RpmNotVerified.tmp | awk -F " " '{print $NF}' | grep /)

  cat RpmNotVerified.tmp > "$RPM_FOLDER/rpmNotVerifiedFiles.txt"


  for FILE in $RPM_NOT_VERIFIED_FILES
  do
    if [[ -f $FILE ]]
    then
      FILE_PATH="$RPM_FOLDER/$(dirname $FILE)"
      mkdir -p "$FILE_PATH"
      sudo cp "$FILE" "$FILE_PATH"
    elif [[ -d $FILE ]]
    then
      log_WARN_message "La ruta $FILE es un directorio, no se copia"
    else
      log_WARN_message "La ruta $FILE no existe, no se copia"
    fi

  done

  rm RpmNotVerified.tmp
}

deb_backup(){
  log_OK_message "Creando lista de paquetes DEB..."
  dpkg-query --list > "$BACKUP_FOLDER/debList.txt"
}

paths_backup(){
  paths_folder="$BACKUP_FOLDER/paths"
  mkdir "$paths_folder"
  for SINGLE_PATH in $(echo $PATH | tr : "\n"); do ls $SINGLE_PATH > "$paths_folder/$(echo $SINGLE_PATH | tr / _).txt"; done
}

environment_backup(){
  env > "$BACKUP_FOLDER/environment.txt"
}

zypper_repos_backup(){
  if [ -d "/etc/zypp/repos.d/" ]
  then
    ZYPPER_REPOS_FOLDER="$ETC_FOLDER/zypp"
    mkdir -p "$ZYPPER_REPOS_FOLDER"
    cp -r /etc/zypp/repos.d/ "$ZYPPER_REPOS_FOLDER"
    log_OK_message "Creado backup del listado de repositorios de zypper";
  else
    log_ERROR_message "No se ha creado el backup del listado de repositorios de zypper";
  fi
}

apt_repos_backup(){
  if [ -d "/etc/apt/" ]
  then
    APT_REPOS_FOLDER="$ETC_FOLDER/apt"
    mkdir -p "$APT_REPOS_FOLDER"
    cp /etc/apt/sources.list "$APT_REPOS_FOLDER"
    cp -r /etc/apt/sources.list.d/ "$APT_REPOS_FOLDER"
    log_OK_message "Creado backup del listado de repositorios de apt";
  else
    log_ERROR_message "No se ha creado el backup del listado de repositorios de apt";
  fi
}

kdeglobals_backup(){
  if [ -f "$HOME/.config/kdeglobals" ]
  then
    mkdir -p "$USER_CONFIG_FOLDER"
    cp "$HOME/.config/kdeglobals" "$USER_CONFIG_FOLDER/"
    log_OK_message "Creado backup del archivo kdeglobals";
  else
    log_ERROR_message "No se ha creado el backup del archivo kdeglobals";
  fi
}

kdedefaults_backup(){
  if [ -d "$HOME/.config/kdedefaults" ]
  then
    mkdir -p "$USER_CONFIG_FOLDER"
    cp -r "$HOME/.config/kdedefaults" "$USER_CONFIG_FOLDER/"
    log_OK_message "Creado backup del archivo kdedefaults";
  else
    log_ERROR_message "No se ha creado el backup del archivo kdedefaults";
  fi
}

#END Function definition

log_ERROR_message "NOTA: En algun momento se podria pedir la contraseña de root para poder realizar el copiado de paquetes";

#Environment backup
environment_backup;
log_OK_message "Creado backup de variables de entorno";

#Backup rpm file list
if [ -x "$(which rpm 2> /dev/null)" ]
then
  rpm_backup;
  log_OK_message "Creado listado RPM";
else
  log_ERROR_message "NO se ha creado el listado RPM";
fi

#Backup deb file list
if [ -x "$(which dpkg-query 2> /dev/null)" ]
then
  deb_backup;
  log_OK_message "Creado listado DEB";
else
  log_ERROR_message "NO se ha creado el listado DEB";
fi

#Backup paths content
paths_backup;
log_OK_message "Creado listado de Paths";

#Backup for dmesg
sudo dmesg > "$BACKUP_FOLDER/dmesg.txt"
log_OK_message "Creado backup dmesg";

#Backup profile files
mkdir -p "$USER_FOLDER"
cp ~/.profile "$USER_FOLDER/profile"

ETC_FOLDER="$ROOT_FOLDER/etc"
mkdir -p "$ETC_FOLDER"
cp /etc/profile "$ETC_FOLDER/profile"
log_OK_message "Creado backup archivos profile";

#Backup bashrc file
cp ~/.bashrc "$USER_FOLDER/bashrc"
log_OK_message "Creado backup archivo bashrc";

#Backup X11
cp -r /etc/X11 "$ETC_FOLDER"
log_OK_message "Creado backup X11";

#Backup Xorg log
if [ -f "/var/log/Xorg.0.log" ]
then
  VAR_LOG_FOLDER="$ROOT_FOLDER/var/log"
  mkdir -p "$VAR_LOG_FOLDER"
  cp /var/log/Xorg.0.log "$VAR_LOG_FOLDER/"
  log_OK_message "Creado backup Xorg log";
else
  log_ERROR_message "NO se ha creado backup de Xorg.log";
fi

#Backup .config files
kdeglobals_backup;
kdedefaults_backup;

#Backup zypper repos
zypper_repos_backup;

#Backup apt repos
apt_repos_backup;

#Backup listado /etc/alternatives
ls -la /etc/alternatives --color=always > "$BACKUP_FOLDER/alternatives.txt"
log_OK_message "Creado backup /etc/alternatives";

#Backup xsessions
USR_SHARE_FOLDER="$ROOT_FOLDER/usr/share/"
mkdir -p "$USR_SHARE_FOLDER"
cp -r /usr/share/xsessions "$USR_SHARE_FOLDER"
chmod +w "$USR_SHARE_FOLDER/xsessions"
log_OK_message "Creado backup xsessions";


#Crear README
echo "Backup creado el $(date +"%F %X") del equipo ($(hostname))" > "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "Esta carpeta contiene un backup de los siguientes elementos:" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "  -BU-log que muestra el log de salida de cuando se creó este backup (si se muestra con 'cat' se mostrarán en verde lo que ha ido bien y en rojo lo que ha ido mal) (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo "  -Contenido de la carpeta /etc/alternatives en el archivo alternatives.txt, el archivo mantiene el esquema de colores del shell, se pueden visualizar usando cat (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "  -Listado de paquetes RPM instalados (Carpeta RPM List)">> "$BACKUP_FOLDER/README.txt"
echo "  -Listado de paquetes RPM con fallos de verificación y una copia de dichos archivos con cambios (Carpeta RPM List)">> "$BACKUP_FOLDER/README.txt"
echo "  -Listado de paquetes DEB instalados (Archivo devList.txt)">> "$BACKUP_FOLDER/README.txt"
echo "  -Log dmesg (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo environment.txt con el contenido de las variables de entorno (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo "  -La carpeta 'paths' contiene archivos con el contenido que tienen todas las rutas declaradas en la variable de entorno PATH " >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "En la carpeta 'RootFolder' se encuentran todos los archivos copiados manteniendo su ruta original en el sistema de archivos (teniendo como referencia de la raiz dicha carpeta RootFolder), los archivos que se guardan en esta carpeta son:" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "  -Carpeta /etc/X11" >> "$BACKUP_FOLDER/README.txt"
echo "  -Carpeta /etc/zypp/repos.d" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo /etc/profile" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo /var/log/Xorg.0.log" >> "$BACKUP_FOLDER/README.txt"
echo "  -Carpeta /usr/share/xsessions/" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "La carpeta del usuario se identifica con /home/usuario (independientemente del nombre del usuario real), los archivos que contiene son (Hay archivos que son ocultos, pero en esta copia se ponen sin el punto inicial para que aparezcan visible):" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo bashrc del usuario" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo profile del usuario" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo .config/kdeglobals del usuario" >> "$BACKUP_FOLDER/README.txt"
echo "  -Archivo .config/kdedefaults del usuario" >> "$BACKUP_FOLDER/README.txt"
Tags

Script | Bash | config | rpm